<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 2.reduce : 累加器 

        // 一、数字的累加
        // var arr = [1,2,3,4];
        // // pre 是上次的累加结果 current 是当前循环的值 index 索引
        // // 0 初始累加的值
        //  var res =  arr.reduce(function(pre,current,index){
        //      console.log(pre,current,index)
        //     return pre + current;
        // },0)
        // console.log(res);


        // 二、数组的累加操作
    //     var arr = [1,2,3,4];

    //    var res =  arr.reduce(function(pre,current){
    //         pre.push(current+10);
    //         return pre;
    //     },[]);
    //     console.log(res);

    // 三 、对象的累加
//     var arr = [1,2,3,4];
//    var res =  arr.reduce(function(pre,current){
//         pre[current] = 1;
//         return pre;
//     },{})
//     // {1:1,2:1,3:1,4:1}
//     console.log(res);

// 1.通过reduce 给数组去重复 
// var arr = [1,2,1,3,2,4,3,5,5];
// 2.var str = "abcabccaaa";  ----> {a:5,b:2,c:3}

// var str = "abcabccaaa";
// // console.log(str[1])
// var arr = [];
// for(var i=0;i<str.length;i++){
//     arr.push(str[i]);
// }
// // console.log(arr);

// var res =  arr.reduce(function(pre,current){
//     // pre[current] = 1;
//     // {a:1,b:1,c:1}
//     // 核心： 判断 current ：a b c 存不存在？如果不存在 初始化一个 a:1 b:1 c:1
//     // 存在 在以前的基础上 加一 a:1 ++ --->a:2
//     typeof pre[current] === "undefined"?pre[current]=1:pre[current]++;
//     return pre;
// },{});
// console.log(res);


// var str = "abcabccaaa";

// 对象的键名是不能重复的。
// var obj = {
//     name1:"张三",
//     name1:"李四",
//     age:20,
//     age:30
// }
// console.log(obj);
// var arr = [1,2,2,3,2,4,3,5];

// var obj = {};
// for(var i=0;i<arr.length;i++){
//     obj[arr[i]] = 1;
// }
// console.log(obj);
// var newarr = [];
// for(var key in obj){
//     newarr.push(parseInt(key));
// }
// console.log(newarr);
// // 转数字 ：1.Number  2. parseInt 3.paseFloat 4.非加的运算符
// var str = "100px";
// console.log( Number(str));
// console.log(parseInt(str));

// 通过for循环来统计字符出现的次数。
// var str = "abcabccaaa";
// var obj = {};
// for(var i=0;i<str.length;i++){
//     // 判断obj里有没有 字符的键名 如果没有 就初始化为 1 ，如果有 就在这个基础上加一；
//     if(typeof obj[str[i]]=== "undefined"){
//         obj[str[i]] = 1;
//     }else{
//         obj[str[i]]++
//     }
// }

// console.log(obj);



// var newarr = []; // 存储不重复的元素；
// for(var i=0;i<arr.length;i++){
//     if(newarr.indexOf(arr[i])===-1){
//         newarr.push(arr[i]);
//     }
// }
// console.log(newarr);

// ${变量} 插值表达式  #{}  {{}}  {} {$变量} <%=变量%>
var  arr = [1,2,1,3];

var res = arr.reduce(function(pre,current){
    pre.indexOf(current)===-1?pre.push(current):null;
    return pre;
},[]);
console.log(res);
/* 
    第一次： 初始值  []  ---> pre = [] -----> current = 1 ---->  pre.indexOf(current) ===-1  pre = [1]
    第二次： pre = [1] ---- current  2   --->pre.indexOf(current) === -1  pre = [1,2]
    第三次： pre = [1,2] --- > current = 1 ----->pre.indexOf(current) === 0 pre= [1,2];
    第四次： pre = [1,2] ---- current  3   --->pre.indexOf(current) === -1  pre = [1,2,3]

*/

    </script>
</body>
</html>